/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package TablasAuxiliares;

import java.util.Vector;
import BaseDatos.GestorBD;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JComboBox;

/**
 *
 * @author Sara
 */
public class TAGeneral {
    
    
    //Atributos
    private String _sCodigo;
    private String _sDescripcion;

    //Vector que almacena los errores que se produzcan en las operaciones con la clase.
    private Vector<String> _vErrores = new Vector<String>();

    
     /*
     * Recupera el nombre de las tablas de la Base de Datos y lo devuelve en un vector
     */
    public void selectNombreTabla ( Vector columnIdentifiers,  Vector dataVector){
        //Inicializo el vector de errores
        this._vErrores.clear();
        try {
            Statement st = GestorBD.getInstancia().getConexion().createStatement();
            ResultSet rs = st.executeQuery("SELECT table_name FROM information_schema.TABLES where table_schema='proyecto'");
            ResultSetMetaData metaDatos = rs.getMetaData();
            // Se obtiene el número de columnas.
            int numeroColumnas = metaDatos.getColumnCount();
            // Se obtiene cada una de las etiquetas para cada columna
            for (int i = 0; i < numeroColumnas; i++){
               // Nuevamente, para ResultSetMetaData la primera columna es la 1.
               columnIdentifiers.addElement( metaDatos.getColumnLabel(i + 1) );
            }          
            while (rs.next()) {
                // Se crea un vector que será cada fila de la tabla.
                Vector fila = new Vector (numeroColumnas);

                // Se rellena cada posición del vector con una de las columnas de la tabla en base de datos.
                for (int i = 0; i < numeroColumnas; i++)
                    fila.addElement ( rs.getObject(i+1) ); // El primer indice en rs es el 1, no el cero, por eso se suma 1.

                // Se añade al modelo la fila completa.
                dataVector.addElement( fila );
            }
            rs.close();
            st.close();

        }catch (SQLException e1){
            this._vErrores.add ( e1.getMessage() );
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public  void selectNombreCampos (String tabla, Vector columnIdentifiers,  Vector dataVector){
        //Inicializo el vector de errores
        this._vErrores.clear();
        try {
            Statement st = GestorBD.getInstancia().getConexion().createStatement();
            ResultSet rs = st.executeQuery("SELECT column_name FROM information_schema.columns WHERE table_name ='"+tabla+"'");
            ResultSetMetaData metaDatos = rs.getMetaData();
            // Se obtiene el número de columnas.
            int numeroColumnas = metaDatos.getColumnCount();
            // Se obtiene cada una de las etiquetas para cada columna
            for (int i = 0; i < numeroColumnas; i++){
               // Nuevamente, para ResultSetMetaData la primera columna es la 1.
               columnIdentifiers.addElement( metaDatos.getColumnLabel(i + 1) );
            }          
            while (rs.next()) {
                // Se crea un vector que será cada fila de la tabla.
                Vector fila = new Vector (numeroColumnas);

                // Se rellena cada posición del vector con una de las columnas de la tabla en base de datos.
                for (int i = 0; i < numeroColumnas; i++)
                    fila.addElement ( rs.getObject(i+1) ); // El primer indice en rs es el 1, no el cero, por eso se suma 1.

                // Se añade al modelo la fila completa.
                dataVector.addElement( fila );
            }
            rs.close();
            st.close();

        }catch (SQLException e1){
            this._vErrores.add ( e1.getMessage() );
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    
    public void selectNombreValor(String sTabla, String sCampo, Vector columnIdentifiers,  Vector dataVector) {
        //Inicializo el vector de errores
        this._vErrores.clear();
        try {
            Statement st = GestorBD.getInstancia().getConexion().createStatement();
            ResultSet rs = st.executeQuery("SELECT " + sCampo + " FROM " + sTabla);
            ResultSetMetaData metaDatos = rs.getMetaData();
            
            //el tipo de la columna no es Integer ni Double
            if (metaDatos.getColumnType(1)!=4 || metaDatos.getColumnType(1)!=8){
            // Se obtiene el número de columnas.
            int numeroColumnas = metaDatos.getColumnCount();
            // Se obtiene cada una de las etiquetas para cada columna
            for (int i = 0; i < numeroColumnas; i++){
               // Nuevamente, para ResultSetMetaData la primera columna es la 1.
               columnIdentifiers.addElement( metaDatos.getColumnLabel(i + 1) );
            }          
            while (rs.next()) {
                // Se crea un vector que será cada fila de la tabla.
                Vector fila = new Vector (numeroColumnas);

                // Se rellena cada posición del vector con una de las columnas de la tabla en base de datos.
                for (int i = 0; i < numeroColumnas; i++)
                    fila.addElement ( rs.getObject(i+1) ); // El primer indice en rs es el 1, no el cero, por eso se suma 1.

                // Se añade al modelo la fila completa.
                dataVector.addElement( fila );
            }
            }
            rs.close();
            st.close();

        }catch (SQLException e1){
            this._vErrores.add ( e1.getMessage() );
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
     public Vector claseAVectorJTable ( Vector columnIdentifiers ){
        Vector resul = new Vector ();
        for (int i=0; i < columnIdentifiers.size(); i++){
            //Cargo el campo Código
            if ( ((String) columnIdentifiers.get(i)).compareToIgnoreCase("Codigo") == 0 )
                resul.add( this._sCodigo );
            //Cargo el campo Descripcion
            else if ( ((String) columnIdentifiers.get(i)).compareToIgnoreCase("Descripcion") == 0 )
                resul.add( this._sDescripcion );
        }
        return resul;
    }    
}
